python支持多继承后,但能否支持动态继承性质?在程序运行过程中,重定义类的继承,python是支持这种动态继承性质的。这也就是python中 的mixin,在定义类过程中改变类的继承顺序,继承类。当某个模块不能修改时,通过mixin方式可以动态添加该类的方法,动态改变类的原有继承体系。
弄懂了多继承,mixin特性就简单多了。 但需要注意mixin后的具体继承体系的改变。
#!/usr/bin/env
pythonimport types
def MixIn(pyClass,mixInClass,makeAncestor=0):
if makeAncestor:
pyClass.bases = (mixInClass,) + pyClass.bases
elif mixInClass not in pyClass.bases:
pyClass.bases = pyClass.bases + (mixInClass,)
else:
pass
class C1(object):
def test(self):
print ‘test in C1’
class C0MixIn(object):
def test(self):
print ‘test in C0MixIn’
class C2(C1,C0MixIn):
def test(self):
print ‘test in C2’
class C0(C1):
pass
if name == “main“:
print C0.mro
c1 = C0()
c1.test()
MixIn(C0,C0MixIn,1)
c0 = C0()
c0.test()
print C0.mro
print C2.mro
MixIn(C2,C0MixIn)
print C2.mro
运行结果如下: python mixin2.py点击(此处)折叠或打开
(
, , ) test in C1
test in C0MixIn
(
, , , ) (
, , , ) (
, , , )
参考资料很详细的MixIn介绍:http://www.linuxjournal.com/node/4540/print